//@author A0080442N
#pragma once
#ifndef TASK_H_
#define TASK_H_

#include "TaskItGlobal.h"
#include "Date.h"
#include "TaskItTime.h"

//Task class for TaskIt. The Task object will hold each task's activity, venue,
//timeStart, timeEnd, category and date. The object will be able to be marked done
//or undone by the program.
class Task {
private:
	string _activity;
	string _venue;
	TaskItTime _timeStart;
	TaskItTime _timeEnd;
	string _category;
	Date _date;
	bool _isDone;
	bool _isFloating;

public:
	Task();
	//Constructor for Task Class.
	//Pre-Req: Takes in three strings - activity, venue, category, takes in two
	//		   TaskItTime objects - timeStart, timeEnd and takes in one Date
	//		   object - Date.
	//Post-Req: Task is created successfully.
	Task(string activity, string venue, TaskItTime timeStart, TaskItTime timeEnd, string category, Date date);

	//This function is used to edit all parameters in the Task object.
	//Pre-Req: Takes in three strings - activity, venue, category, takes in two
	//		   TaskItTime objects - timeStart, timeEnd and takes in one Date
	//		   object - Date.
	//Post-Req: Task is edited successfully.
	void editTask(string activity, string venue, TaskItTime timeStart, TaskItTime timeEnd, string category, Date date);
	//This function is used to mark the task as done.
	//Pre-Req: None.
	//Post-Req: Task is marked done.
	void markDone();
	//This function is used to mark the task as not done.
	//Pre-Req: None.
	//Post-Req: Task is marked not done.
	void markUndone();
	//This function is used to remove the "Block" in the activity to indicate.
	//confirmation in the Task by the user.
	//Pre-Req: None.
	//Post-Req: "Block" is removed from activity string.
	void confirm();

	//This is a getter function to get the activity in the Task.
	//Pre-Req: None.
	//Post-Req: Return the activity in the Task.
	string getActivity();
	//This is a getter function to get the venue in the Task.
	//Pre-Req: None.
	//Post-Req: Return the venue in the Task.
	string getVenue();
	//This is a getter function to get the timeStart object in the Task.
	//Pre-Req: None.
	//Post-Req: Return the timeStart object in the Task.
	TaskItTime getTimeStart();
	//This is a getter function to get the timeEnd object in the Task.
	//Pre-Req: None.
	//Post-Req: Return the timeEnd object in the Task.
	TaskItTime getTimeEnd();
	//This is a getter function to get the category in the Task.
	//Pre-Req: None.
	//Post-Req: Return the category in the Task.
	string getCategory();
	//This is a getter function to get the Date object in the Task.
	//Pre-Req: None.
	//Post-Req: Return the Date object in the Task.
	Date getDate();
	//This is a getter function to get all the details in the Task.
	//Pre-Req: None.
	//Post-Req: Return all the details as a string.
	string getAllDetails();
	//This is a getter function to get the boolean _isDone of the Task.
	//Pre-Req: None.
	//Post-Req: Return the boolean _isDone in the Task.
	bool getDone();
	//This is a getter function to get the boolean _isFloating of the Task.
	//Pre-Req: None.
	//Post-Req: Return the boolean _isFloating in the Task.
	bool getFloating();

	//This is the function to check whether the second Task is the
	//same as the first Task.
	//Pre-Req: None.
	//Post-Req: Returns true is the tasks are the same, else returns false.
	bool isSameTask(Task secondTask);
};

#endif